#include "../game.h"
#include "kung.h"

/*---------------------------------

Kung::Kung( bool spelare, short x, short y )
virtual
Konstruktor, sätter bild och typ

---------------------------------*/

Kung::Kung( bool spelare, short x, short y ) : Pjas(spelare, x, y) {
	bild = video.loadImage( spelare == VIT ? "vit_kung.bmp" : "svart_kung.bmp" );
	typ = KUNG;
}

/*---------------------------------

void Kung::mojligtDrag( void )
overloadad, virtual
Kollar vilka positioner kungen kan gå till.
Sätter: 0 friend i vägen, 1 kan gå, 2 fiendepjäs man kan ta

---------------------------------*/

void Kung::mojligtDrag( void ) {
	// Nollställ arrayen
	for( int i = 0; i < 8; i++ ) {
		for( int j = 0; j < 8; j++ ) {
			mojligaDrag[i][j] = 0;
		}
	}

	// Array med offsets till dragen
	static const short drag[8][2] = {{1, 0}, {-1, 0}, {1, 1}, {1, -1}, {-1, 1}, {-1, -1}, {0, 1}, {0, -1}};

	// Loopa genom drag-arrayen
	for( int i = 0; i < 8; i++ ) {
		short x, y;
		x = xpos + drag[i][0];
		y = ypos + drag[i][1];
		// Avbryt om draget är utanför brädet
		if( x < 0 || x > 7 || y < 0 || y > 7 ) {
			continue;
		}

		// Kolla om draget är möjligt. (existerarPjas är NEJ, JA eller HOTAR)
		mojligaDrag[x][y] = Pjas::existerarPjas( x, y );
	}
}
void Kung::rockadMojligt( void ) {
	if( !this->hotad && !this->flyttad ) {
		int undreRad = Spelare::undreRad( this->spelare );

		// Det får inte stå några pjäser mellan kungen och tornet samt tornet får inte vara flyttat
		if( !game->pjasArray[2][undreRad] && game->pjasArray[0][undreRad] && game->pjasArray[0][undreRad]->typ == TORN && game->pjasArray[0][undreRad]->flyttad == false && !game->pjasArray[1][undreRad] && !game->pjasArray[3][undreRad] ) {
			Pjas** pjaser = game->spelare[!this->spelare]->ptrArray;
			// Rutorna kungen går genom får inte vara hotade
			for( int i=0; i<16; i++ ) {
				if( pjaser[i] && ( pjaser[i]->mojligaDrag[2][undreRad] == JA || pjaser[i]->mojligaDrag[3][undreRad] == JA ) )
				goto testa_kort_rockad; // Kunde inte lång rockad..
			}
			mojligaDrag[2][undreRad] = JA;
		}

		testa_kort_rockad:
		if( !game->pjasArray[6][undreRad] && game->pjasArray[7][undreRad] && game->pjasArray[7][undreRad]->typ == TORN && game->pjasArray[7][undreRad]->flyttad == false && !game->pjasArray[5][undreRad] ) {
			Pjas** pjaser = game->spelare[!this->spelare]->ptrArray;
			for( int i=0; i<16; i++ ) {
				if( pjaser[i] && ( pjaser[i]->mojligaDrag[5][undreRad] == JA || pjaser[i]->mojligaDrag[6][undreRad] == JA ) )
				return; // Kunde inte kort rockad..
			}
			mojligaDrag[6][undreRad] = JA;
		}
	}
}
